package com.express.common;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * <p>配置信息读取</p>
 * <p>Author: jun.zhao</p>
 * <p>Date: 2016年11月2日</p>
 */
public class ConfigUtils {
	
	//配置文件路径
	public static final String CFG_NAME = "cfg" ; 
	
	private static ResourceBundle resourceBundle = ResourceBundle.getBundle(CFG_NAME, Locale.getDefault()) ; 
	
	//新增“${xxx}”引用的写法
	private static Pattern refPattern = Pattern.compile("\\$\\{([^\\}]+)\\}") ; 
	
	/**
	 * 获取一个值
	 * @param key
	 * @param params 需要替换的参数
	 * @return
	 */
	public static String getString(String key){
		return getString(key, null) ; 
	}
	
	/**
	 * 获取一个值
	 * @param key
	 * @param params 需要替换的参数
	 * @return
	 */
	public static String getString(String key, Map<String, String> params){
		StringBuffer sb = new StringBuffer() ; 
		String value = doGetString(key) ; 
		Matcher m = refPattern.matcher(value) ; 
		while( m.find() ){
			String newKey = m.group(1) ; 
			String newValue = null ; 
			if( params != null && params.containsKey(newKey) ){
				newValue = params.get(newKey) ; 
			}else {
				newValue = getString(newKey, params) ; 
			}
			newValue = newValue.replace("\\", "\\\\").replace("$", "\\$") ; 
			m.appendReplacement(sb, newValue) ; 
		}
		m.appendTail(sb) ; 
		return sb.toString() ; 
	}
	
	/**
	 * 获取一个值
	 * @param key
	 * @return
	 */
	public static String doGetString(String key){
		return resourceBundle.getString(key) ; 
	}
	
	/**
	 * 获取一个值
	 * @param key
	 * @return
	 */
	public static int getInt(String key, int defaultValue){
		String v = getString(key) ; 
		if( v == null ){
			return defaultValue ; 
		}
		try {
			return Integer.parseInt(v) ; 
		} catch (NumberFormatException e) {
			return defaultValue ; 
		}
	}
	
	public static void main(String[] args) {
		Map<String, String> params = new HashMap<String, String>() ; 
		params.put("code", "123123") ; 
		String str = ConfigUtils.getString("wx.getOpenId", params) ;
		String str1 = ConfigUtils.getString("wx.appId");
		System.out.println(str);
		System.out.println(str1);
	}

}
